package com.itheima.d5_arrays;

import java.util.Arrays;
import java.util.function.IntToDoubleFunction;

/**
 * 目标：掌握Arrays类的常用方法。用来操作数组的一个工具类
 *
 */
public class ArraysTest1 {
    public static void main(String[] args) {
        // 1、public static String toString(类型[] arr): 返回数组的内容
        int[] arr = {10, 20, 30, 40, 50, 60};
        System.out.println(Arrays.toString(arr));

        System.out.println("=====copyOfRange=====");

        // 2、public static 类型[] copyOfRange(类型[] arr, 起始索引, 结束索引) ：拷贝数组（指定范围，包前不包后）
        int arrr1[] = Arrays.copyOfRange(arr,2,5);
        System.out.println(Arrays.toString(arrr1));
        int ass1[] = Arrays.copyOfRange(arr,2,5);
        System.out.println("调用array的tostring,ass1:  "+ass1.toString());    //要调用array的tostring
        System.out.println("直接输出ass1： "+ass1);
        System.out.println("调用Array的tostring,ass1:  "+Arrays.toString(ass1));

        System.out.println("======copyOf可以指定新数组的长度====");

        // 3、public static copyOf(类型[] arr, int newLength)：拷贝数组，可以指定新数组的长度。
        int[] arr3 = Arrays.copyOf(arr, 10);
        System.out.println(Arrays.toString(arr3));
        int[] ass2 = Arrays.copyOf(arr,4);
        System.out.println(Arrays.toString(ass2));

        System.out.println("=====setAll把数组中的原数据改为新数据又存进去=====");

        // 4、public static setAll(double[] array, IntToDoubleFunction generator)：把数组中的原数据改为新数据又存进去。
        double[] prices = {99.8, 128, 100};
        //                  0     1    2
        // 把所有的价格都打八折，然后又存进去。
        /*Arrays.setAll(prices, new IntToDoubleFunction() {
            @Override
            public double applyAsDouble(int value) {
                // value = 0  1  2
                return prices[value] * 0.8;
            }
        });*/
        //自己写一遍，
        // setAll的源码：public static void setAll(double[] array, IntToDoubleFunction generator)
        //public interface IntToDoubleFunction
        Arrays.setAll(prices, new IntToDoubleFunction() {
            @Override
            public double applyAsDouble(int value) {
                return prices[value] * 0.8;
            }
        });

        System.out.println(Arrays.toString(prices));

        System.out.println("=====sort默认是升序排序=====");

        // 5、public static void sort(类型[] arr)：对数组进行排序(默认是升序排序)，从小到大
        Arrays.sort(prices);
        System.out.println(Arrays.toString(prices));
    }
}
